package source.Objetos 
{
    import net.flashpunk.Entity;
    import net.flashpunk.graphics.Image;
    import source.Assets;
    import source.Global;

	public class Powerup extends Entity {
		
        //Códigos de los power-ups:
        public static const
            TODOS:uint             = 0,
            CORRER:uint            = 1,
            DOBLE_SALTO:uint       = 2,
            DISPARAR:uint          = 3,
            NADAR:uint             = 4,
            EMPUJAR:uint           = 5,
            GOLPE_DESCENDENTE:uint = 6;
            
		public var tipo:uint = TODOS;      //tipo de power-up
        public var eliminar:Boolean = false; //indica si debemos eliminar el power-up debido a que el PJ ya lo tiene
		
		public function Powerup(x:int, y:int, _poderes:Array) {
			super(x, y);
			setHitbox(Global.grid, Global.grid, 0, 0);
			
			if      (_poderes[0] == "True") { graphic = new Image(Assets.OBJ_PU_CORRER);            tipo = CORRER; }
			else if (_poderes[1] == "True") { graphic = new Image(Assets.OBJ_PU_DOBLE_SALTO);       tipo = DOBLE_SALTO; }
			else if (_poderes[2] == "True") { graphic = new Image(Assets.OBJ_PU_DISPARAR);          tipo = DISPARAR; }
			else if (_poderes[3] == "True") { graphic = new Image(Assets.OBJ_PU_NADAR);             tipo = NADAR; }
			else if (_poderes[4] == "True") { graphic = new Image(Assets.OBJ_PU_EMPUJAR);           tipo = EMPUJAR; }
			else if (_poderes[5] == "True") { graphic = new Image(Assets.OBJ_PU_GOLPE_DESCENDENTE); tipo = GOLPE_DESCENDENTE; }
			else                            { graphic = new Image(Assets.OBJ_POWERUP);              tipo = TODOS; }
            
            //Si el PJ ya tiene el power-up, hacemos invisible su gráfico (porque si no se mostraría
            //durante un frame y daría la sensación de parpadeo) e indicamos que ha de ser eliminado:
            if ((Global.pj.correr           && tipo == CORRER) ||
                (Global.pj.dobleSalto       && tipo == DOBLE_SALTO) ||
                (Global.pj.disparar         && tipo == DISPARAR) ||
                (Global.pj.nadar            && tipo == NADAR) ||
                (Global.pj.empujar          && tipo == EMPUJAR) ||
                (Global.pj.golpeDescendente && tipo == GOLPE_DESCENDENTE)) {
                    graphic.visible = false;
                    eliminar = true;
            }
		}
		
		override public function update():void {
            //Si el PJ consigue el power-up...
			if (collideWith(Global.pj, x, y)) {
				switch (tipo) {
					case CORRER: Global.pj.correr = true; break;
					case DOBLE_SALTO: Global.pj.dobleSalto = true; break;
					case DISPARAR: Global.pj.disparar = true; break;
					case NADAR: Global.pj.nadar = true; break;
					case EMPUJAR: Global.pj.empujar = true; break;
					case GOLPE_DESCENDENTE: Global.pj.golpeDescendente = true; break;
					case TODOS:
						Global.pj.correr = true;
						Global.pj.dobleSalto = true;
						Global.pj.disparar = true;
						Global.pj.nadar = true;
						Global.pj.empujar = true;
						Global.pj.golpeDescendente = true;
					break;
				}
				
				world.remove(this);
			}
            
            //Si debemos borrarlo porque ya lo tiene (al cargar una pantalla donde supuestamente se encuentra este power-up)...
            else if (eliminar)
                world.remove(this);
		}
	}
}